
package jumavidesktop.GUI.Mantenimientos.Usuarios.Controlador;

import java.util.ArrayList;
import java.util.List;
import jumavidesktop.GUI.Mantenimientos.ControladorAbs;
import jumavidesktop.GUI.Mantenimientos.interfaz.IMantenimiento;
import jumavidesktop.Otros.Pojos.MyRespuesta;
import jumavidesktop.Persistencia.Dao.Implementaciones.DaoUsuario;
import jumavidesktop.Persistencia.Dao.Interfaces.IDao;
import jumavidesktop.Persistencia.Dao.Interfaces.IDaoUsuarios;
import jumavidesktop.Persistencia.entidades.Usuario;

/**
 *
 * @author vimso
 */
public class MUsuarios  extends ControladorAbs<Usuario> implements IMantenimiento<Usuario> {

    private Usuario usuarioActual;
    private String criterioBusqueda;
    private IDaoUsuarios daoUsuario= new DaoUsuario();
    private List<String> orCampos;
    
    //constatnes privadas
    public static final String orNombre="nombre";
    public static final String orApellido="apellidos";
    public static final String orDNI="dni";
    

    public MUsuarios() { 
        //Añado los posibles criterio de busquedas
        this.orCampos= new ArrayList<>();
        this.orCampos.add(orNombre);
        this.orCampos.add(orApellido);
        this.orCampos.add(orDNI);   
        this.setCriterioBusqueda(this.orCampos.get(0));    
    }
    
    /**
     * Método que en función del criterio de busqueda me devuelve el valor del campo correspondiente
     * @return Valor del campo correspondiente del criterio de busqueda
     */
    @Override
    public String getValorSegunCriterio() {
        if (this.usuarioActual != null) {
            if (this.criterioBusqueda.equals(orNombre)) {
                return this.usuarioActual.getNombre();
            } else if (this.criterioBusqueda.equals(orApellido)) {
                return this.usuarioActual.getApellidos();
            } else if (this.criterioBusqueda.equals(orDNI)) {
                return this.usuarioActual.getDni();
            }
        }
        return "";

    }
        
    @Override
    public void campoBusqueda(String campoOrden) {
        this.setCriterioBusqueda(campoOrden);
    }

    @Override
    public Usuario getEntidadActual() {
        return usuarioActual;
    }


    //<editor-fold defaultstate="collapsed" desc="Setter and Getter (Privados)">
    
    @Override
    public  void setEntidadActual(Usuario usuarioActual) {
        this.usuarioActual = usuarioActual;
    }
// probando el editor de google code

    @Override  
    public String getCriterioBusqueda() {
        return criterioBusqueda;
    }

    public void setCriterioBusqueda(String criterioBusqueda) {
        this.criterioBusqueda = criterioBusqueda;
    }
    //</editor-fold>
    

    public void setOrCampos(List<String> orCampos) {
        this.orCampos = orCampos;
    }


    @Override
    public IDao getDaoGenerico() {
        return daoUsuario;
    }

    @Override
    public String getNombreJPQLEntidad() {
        return "Usuario";
    }

    @Override
    public List<String> ordenarPor() {
        return this.orCampos;
    }


    @Override
    public MyRespuesta guardar(Usuario elemento) {
        MyRespuesta res;
        
        if (this.isCreandoEntidad()) {
            res = daoUsuario.guardarUsuario(elemento);
        } else {
            elemento.setId(usuarioActual.getId());
            res = daoUsuario.actualizarUsuario(elemento);
        }
        
        if(res.getTodoOK()){
            setEntidadActual(elemento);
            this.setCreandoEntidad(false);
        }
        return res;
    }

    @Override
    public MyRespuesta eliminar(Usuario elemento) {
        return daoUsuario.eliminarUsuario(elemento);
    }

    @Override
    public String getId() {
        if(this.usuarioActual!=null && this.usuarioActual.getId()!=null){
            return this.usuarioActual.getId().toString();
        }
        return "";
    }

    @Override
    public String getCampoId() {
        return "id";
    }
}
